﻿#ifndef CUSTOMTABLEWIDGET_H
#define CUSTOMTABLEWIDGET_H

#include <QAbstractButton>
#include <QMap>
#include <QEvent>

#include "TableLineEdit.h"
#include "components/FWidgets/FTableWidget/FTableWidget.h"

class CustomTableWidget : public FTableWidget
{
    Q_OBJECT

public:
    explicit CustomTableWidget(QWidget *parent = nullptr);

    // 设置表头的接口
    void setHeaders(const QStringList& headers);
    // 添加行数据的接口
    void addRow(const QStringList& data, const QString& buttonText="");
    void addRow(const QStringList& data, QAbstractButton* btn);
    void insertRow(int row, const QStringList& data, const QString& buttonText="");
    void insertRow(int row, const QStringList& data, QAbstractButton* btn);
    // 设置指定行的按钮文本
    void setButtonText(int row, const QString& text);
    // 设置列宽
    void setCustomColumnWidth(int column, int width);
    // 设置列对齐方式
    void setColumnAlignment(int column, Qt::Alignment alignment);

    // 选中的行数
    int checkedRowsCount() const;
    bool isRowChecked(int row) const;
    QString cellText(int row, int col) const;
    void setCellText(int row, int col, const QString& text);
    void setCellValidator(int row, int col, QRegExpValidator* validator);
    void setCellPasteCallback(int row, int col, QStringCallback_fn callback);
    void setCellAutoComplete(int row, int col, const QStringList &displays, const QStringList &values=QStringList());
    void enableCellAutoComplete(int row, int col, bool en);
    void enableCellKeyEnterCallButton(bool en);

signals:
    void checkBoxClicked(int row, bool checked);
    void buttonClicked(int row);

private slots:
    // 处理表头点击事件
    void onHeaderSectionClicked(int logicalIndex);
    void moveFocus(int row, int col, TableLineEdit::Direction direction);

private:
    void setupColumns();
    void updateColumnAlignment(int column);
    // 辅助方法处理通用的行添加逻辑
    void setupRowData(int row, const QStringList& data);

    int getEditRow(TableLineEdit* edit);
    int getBtnRow(QAbstractButton* btn);

private:
    QStringList m_headers;          // 存储表头文本
    int m_checkBoxColumnWidth;      // 复选框列宽度
    int m_buttonColumnWidth;        // 按钮列宽度
    QMap<int, Qt::Alignment> m_columnAlignments;
    bool m_isAllChecked;            // 记录当前是否全选状态
    bool m_keyEnterCallButton;      // 回车键触发按钮
};

#endif // CUSTOMTABLEWIDGET_H
